#include "mywidget.h"


#define  MANNER 1

MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
{
    this->setWindowTitle("Draw_基本绘图操作");

}

MyWidget::~MyWidget()
{
}

void MyWidget::paintEvent(QPaintEvent *ev)
{
    //画家：
#if MANNER
    QPainter painter(this);
#else
    QPainter painter;
    painter.begin(this);        //开始绘图
#endif


    //画矩形：长方形   正方形
    /*
    painter.drawRect(20,20,80,80);
    QRect rect(20,120,300,200);
    painter.drawRect(rect);
    */



    //画 圆   和椭圆：
    /*
    QRect rect(0,0,200,100);
    painter.drawEllipse(rect);
    painter.drawEllipse(QRect(100,100,300,300));
    */



    //画 线：
    /*
            //画一条线：

    painter.drawLine(QPoint(10,0),QPoint(200,200));
    QLine line(QPoint(10,10),QPoint(400,400));
    painter.drawLine(line);

            //画多条线：
    QPoint arr[] = {QPoint(40,40),QPoint(100,100),QPoint(150,150),QPoint(300,300)};
    painter.drawLines(arr,4);
    */



    //画点：
    /*
    painter.drawPoint(QPoint(40,40));
    painter.drawPoint(60,60);
    */



    //画圆弧（开口的）：
    /*
    QRect rect(30,30,400,200);
    painter.drawArc(rect,30*16,120*16);     //角度的问题，如果想了解去看看帮助文档吧...
    */



    //画弦（封闭的）：
    /*
    QRect rect(30,30,400,200);
    painter.drawChord(rect,30*16,120*16);
    */



    //画多边形（封闭的）：五边形
    /*
    QPoint arr[] = {QPoint(117,24),QPoint(201,82),QPoint(171,176),QPoint(64,176),QPoint(32,82)};
    painter.drawPolygon(arr,sizeof(arr)/ sizeof(arr[0]));
    */



    //画开口的多边形   折线（开口的）：
    /*
    QPoint arr[] = {QPoint(117,24),QPoint(201,82),QPoint(171,176),QPoint(64,176),QPoint(32,82)};
    painter.drawPolyline(arr,sizeof(arr)/ sizeof(arr[0]));
    */



    //画圆角矩形：
    /*
    QRect rect(20,20,400,400);
    painter.drawRoundedRect(rect,15,15);        //数字是角度
    */



    //输出文字：
    /*
    painter.drawText(QPoint(100,100),"Qt");     //输出文字的在窗口的起始坐标
    QRect rect(0,120,800,120);
    painter.drawText(rect,                                                                   //把文字输出在相对的矩形区域里；
                        Qt::AlignLeft,                         //风格        居左           更多风格去帮助文档
                     "Qt就是一个十分庞大的数据类库，把每一个类中的成员函数了解一遍");
    */



    //填充一个区域：
    /*
    QRect rect = {20,20,400,400};
    painter.fillRect(rect,QColor(0,0,0));
    */



    // 擦除一个区域：
    /*
    QRect rect = {20,20,400,400};
    painter.eraseRect(rect);
    */



    //窗口大小：
    /*
    QRect rect = painter.window();
    qDebug()<<rect;
    */



    //绘制图片：
    /*
    QRect rect(20,20,400,400);
    QImage image("back.jpg");       //图片 位置放在build文件里
    //painter.drawImage(rect,image);
    //painter.drawImage(painter.window(),image);

    painter.drawPixmap(rect,QPixmap("back.jpg"));

    //这个就不是输出图片了，这个是保存picture绘制的内容到.pic文件中，.pic文件保存在bulid文件中
    QPicture picture;
    QPainter p;
    p.begin(&picture);
    p.drawPixmap(rect,QPixmap("back.jpg"));
    p.end();
    picture.save("draw.pic");
    //注意：QPixmap 主要是用来绘图，来显示到屏幕中，依赖平台的绘图引擎，在不同的平台上面绘制的效果可能会不一样
               // QImage    主要也是为图像设计的，他使用的是Qt的引擎
    */



    /*
    //画笔：
    //QPen pen(QColor(255,0,0));      //调制画笔的颜色
    QPen pen(Qt::DashLine);                 //调制画笔的书写风格，在帮助文档中也看到各种风格

    pen.setWidth(10);                             //设置宽度
    pen.setColor(QColor(255,0,0));      //设置颜色
    pen.setCapStyle(Qt::RoundCap);                          //将钢笔的帽子样式设置为指定的样式
    painter.setPen(pen);
    //设置完之后，画出的图形都是基于这个笔来画的
    painter.drawRoundedRect(QRect(20,20,600,400),15,15);



    //画刷：
    QBrush brush(QColor(255,255,0));
    painter.setBrush(brush);

    painter.drawRect(700,20,800,100);
    //画刷和填充的区别是：填充是直接用painter的画刷画，而不产生钢笔的效果
    //painter.fillRect(QRect(300,0,500,200),QColor(0,255,255));
    */



    //渐变：
    /*
    QLinearGradient lineGradient(QPoint(100,0),QPoint(100,200));
    lineGradient.setColorAt(0,QColor(255,0,0));
    lineGradient.setColorAt(1,QColor(0,255,0));

    painter.setBrush(lineGradient);

    //绘制矩形：
    painter.drawRect(0,0,200,200);
    //垂直过度的
    */



    //辐射渐变：
    /*
    QRadialGradient radialGradient(QPoint(200,200),     //被扩散的起始位置
                                   100,                         //辐射渐变扩散的大小
                                   QPoint(200,200)  //扩散的起始位置
                                   );
    radialGradient.setColorAt(0,QColor(255,0,0));
    radialGradient.setColorAt(1,QColor(0,255,0));
    painter.setBrush(radialGradient);
    painter.drawEllipse(QPoint(200,200),100,100);
    */



    //锥形渐变：
    /*
    QConicalGradient conicalGradient(QPoint(200,200),60);
    conicalGradient.setColorAt(0,QColor(255,0,0));
    conicalGradient.setColorAt(1,QColor(0,255,0));
    painter.setBrush(conicalGradient);
    painter.drawEllipse(QPoint(200,200),50,50);
    */



#if !MANNER
    painter.end();                  //结束绘图
#endif

}

